<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <script>
    let p = new Promise( (resolve, reject) => {
        setTimeout( () => {
          resolve('ok');
        }, 1000);
    });

    let result =  p.then(value => {
      console.log(value);
      return new Promise((resolve, reject) => {
        resolve('success');
      });
    }).then( value => {
      console.log( value );
    }).then( value => {
      console.log( value );
      return 123
    })

    console.log(result);

  </script>
  <script>
    /**
     * 首先执行 new Promise 执行器内部是异步操作
     * 所以先指定回调 .then
     * 等待 1秒
     * 执行 new Promise   内部resolve方法将其Promise状态修改为 成功.
     * 执行指定回调 .then 打印 ok
     * return 返回 一个新的 Promise对象
     * 此时 result 一直处于 pending 状态  等待所有 指定回调执行完毕 状态才会改变
     * 执行 新的 Promise对象  
     * 执行 resolve方法将其Promise状态修改为 成功
     * 指定回调 .then 并执行
     * 打印 success
     * 没有设定返回值. 所以是 undefined
     * undefined 不是一个 Promise 类型的对象
     * 所以要返回一个 Promise 对象, 
     * 并且 Promise对象的状态设置为 成功, 
     * 成功的 Promise的结果 就是 undefined (非Promise对象)
     * 指定回调 .then 并执行
     * 打印 undefined
     * return 返回 123  一个 非 Promise 对象
     * 所以要返回一个 Promise 对象
     * 并且 Promise 对象的状态设置为 成功
     * 成功的 Promise 的结果 就是 123 (非Promise对象)
     * 至此 所有的回调函数执行完毕, result 由 pending状态 转换 为 fulfilled状态
     * 打印 result 输出 Promise对象 PromiseResult 值是 123
    */
  </script>

</body>
</html>